﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace NutriLeaf.Web.Core.Notifications
{
    public interface INotifications
    {
        void InsertNotification(string notificationText, string metaData, int userId, int id, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertNotification(Model.Notification notifications, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertNotifications(List<Model.Notification> notificaitons, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetNotifications(int UserId, DateTime day, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetFriendNotifications(int userId, DateTime day, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetNotifications(int UserId, DateTime startDay, DateTime endDay, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetFriendNotifications(int userId, DateTime startDay, DateTime endDay, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetNotifications(int UserId, DateTime day, Model.NotificationType type, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetFriendNotifications(int userId, DateTime day, Model.NotificationType type, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetNotifications(int UserId, DateTime startDay, DateTime endDay, Model.NotificationType type, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Notification> GetFriendNotifications(int userId, DateTime startDay, DateTime endDay, Model.NotificationType type, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveNotification(Model.Notification notification, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveRecentNotification(int UserId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void UpdateRecentNotification(int userId, string notificationText, string metaData, Model.NotificationType notificationType, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        Model.Notification GetRecentNotification(int userId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void UpdateUserNotification(Model.Notification notification, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.NotificationType> GetAllNotificationTypes(ref Model.NutriLeafDBEntities context);

        Model.NotificationType GetNotificationTypeForANotification(int notificationId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

    }
}